package envio;

import static org.junit.Assert.*;
import static org.mockito.Mockito.*;

import java.util.HashMap;
import java.util.Map;

import org.joda.time.DateTime;
import org.junit.Before;
import org.junit.Test;

import productos.Presentacion;

public class TestEstadoEnvio {

	EstadoEnvio estadoEnvio;
	Envio envio;
	Map<Presentacion, Integer> productos;
	Presentacion presentacionEnvio;

	@Before
	public void setUp() throws Exception {
		productos = new HashMap<Presentacion, Integer>();
		presentacionEnvio = mock(Presentacion.class);
		productos.put(presentacionEnvio, 1);
		envio = new Envio(productos, DateTime.now());
	}

	@Test
	public void testSeteoUnEstadoComoPendiente() {
		envio.setEnvioPendiente();
		assertTrue(envio.pendiente());
		assertFalse(envio.cancelado());
		assertFalse(envio.enProceso());
		assertFalse(envio.entregado());
		assertFalse(envio.sinStock());
		assertFalse(envio.reprogramado());
	}

	@Test
	public void testSeteoUnEstadoComoCancelado() {
		envio.setEnvioCancelado();
		assertTrue(envio.cancelado());
		assertFalse(envio.pendiente());
		assertFalse(envio.enProceso());
		assertFalse(envio.entregado());
		assertFalse(envio.sinStock());
		assertFalse(envio.reprogramado());
	}

	@Test
	public void testSeteoUnEstadoComoEnProceso() {
		envio.setEnvioEnProceso();
		assertTrue(envio.enProceso());
		assertFalse(envio.pendiente());
		assertFalse(envio.cancelado());
		assertFalse(envio.entregado());
		assertFalse(envio.sinStock());
		assertFalse(envio.reprogramado());
	}

	@Test
	public void testSeteoUnEstadoComoEntregado() {
		envio.setEnvioEntregado();
		assertTrue(envio.entregado());
		assertFalse(envio.pendiente());
		assertFalse(envio.cancelado());
		assertFalse(envio.enProceso());
		assertFalse(envio.sinStock());
		assertFalse(envio.reprogramado());
	}

	@Test
	public void testSeteoUnEstadoComoReprogramado() {
		envio.setEnvioReprogramado();
		assertTrue(envio.reprogramado());
		assertFalse(envio.pendiente());
		assertFalse(envio.cancelado());
		assertFalse(envio.enProceso());
		assertFalse(envio.entregado());
		assertFalse(envio.sinStock());
	}

	@Test
	public void testSeteoUnEstadoComoSinStock() {
		envio.setEnvioSinStock();
		assertTrue(envio.sinStock());
		assertFalse(envio.pendiente());
		assertFalse(envio.cancelado());
		assertFalse(envio.enProceso());
		assertFalse(envio.entregado());
		assertFalse(envio.reprogramado());
	}

}